package empleados.clases.entidades;

import java.sql.ResultSet;

public class Empleado extends Persona{

    private BaseDatos bd;

    private String numeroImss;
    private String clinicaImss;
    private String rfc;
    private String curp;
    private TipoContrato tipoContrato;
    private TipoEmpleado tipoEmpleado;
    private int sueldoDiario;
    private String fechaIngreso;
    private Persona padre;
    private Persona madre;
    private String puesto;
    private Empresa empresa;
    private String numeroCreditoInfonavit;
    private String tipoNomina;
    private String departamento;
    private int antiguedadUltimoEmpleo;
    private String constanciaRetencionUltimoEmpleo;
    private int cuentaBanco;
    private NumeroMillas[] datosViajero;
    private DocumentosPersonales[] documentos;
    private Consumibles[] electronicos;
    private Consumibles[] accesorios;
    private Persona conyuge;
    private Persona[] hijos;

    class Consumibles{
        private String nombre;

        public Consumibles(String nombre){
            this.nombre = nombre;
        }

        public void setNombre(String nombre){
            this.nombre = nombre;
        }

        public String getNombre(){
            return this.nombre;
        }

    }

    class Electronicos extends Consumibles{
        private String numeroSerie;
        private String modelo;
        private String marca;
		private String fechaAdq;

        public Electronicos(String nombre, String fechaAdq, String numeroSerie, String modelo, String marca){
            super(nombre);
            this.fechaAdq = fechaAdq;
            this.numeroSerie = numeroSerie;
            this.modelo = modelo;
            this.marca = marca;
        }

        public void setNumeroSerie(String numeroSerie){
            this.numeroSerie = numeroSerie;
        }

        public void setModelo(String modelo){
            this.modelo = modelo;
        }

        public void setFechaAdq(String fechaAdq){
            this.fechaAdq = fechaAdq;
        }

        public void setMarca(String fechaAdq){
            this.marca = marca;
        }

        public String getNumeroSerie(){
            return this.numeroSerie;
        }

        public String getModelo(){
            return this.modelo;
        }

        public String getFechaAdq(){
            return this.fechaAdq;
        }

        public String getMarca(){
            return this.marca;
        }

    }

    class DocumentosPersonales{
        private TipoDocumento documento;
        private boolean digitalizado;

        public DocumentosPersonales(){
            documento = TipoDocumento.ACTANACIMIENTO;
			digitalizado = true;
        }

    }

    class NumeroMillas{
        private String aerolinea;
        private String numero;

        public NumeroMillas(){
            this.aerolinea = "America Airlines";
            this.numero = "AA123";
        }

    }

    public enum TipoDocumento{
        DEFAULT("Default"),
        ACTANACIMIENTO("Acta de Nacimiento"),
        IFE("IFE"),
        COMPROBANTEDOMICILIO("Comprobante de domicilio"),
        IMSS("IMSS"),
        ALTAEMPLEADO("Alta empleado"),
        SOLUCITUDGM("Solucitud GM");

        private final String name;

        private TipoDocumento(String tipo){
            this.name = tipo;
        }

        public String getName(){
            return this.name;
        }

    }

    public enum TipoContrato{
        DEFAULT("Default"),
        PERMANENTE("Permanente"),
        TEMPORAL("Temporal");

        private final String name;

        private TipoContrato(String tipo){
            this.name = tipo;
        }

        public String getName(){
            return this.name;
        }

    }

    public enum TipoEmpleado{
        DEFAULT("Default"),
        CONSULTOR("Consultor"),
        MANAGER("Manager");

        private final String name;

        private TipoEmpleado(String tipo){
            this.name = tipo;
        }

        public String getName(){
            return this.name;
        }

    }

    public Empleado(int id){
        ResultSet resultado;
        bd = new BaseDatos("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/terafit", "root", "");
		resultado = bd.obtenerDatos("SELECT * FROM empleado AS e JOIN persona AS p ON e.id_persona = p.id WHERE e.id = " + id);
        try{
            resultado.next();
            System.out.println(resultado.getString("numeroImss"));
			System.out.println(resultado.getString("clinicaImss"));
		    System.out.println(resultado.getString("rfc"));
			System.out.println(resultado.getString("tipoContrato"));
			System.out.println(resultado.getString("tipoEmpleado"));
			System.out.println(resultado.getInt("sueldoDiario"));
			System.out.println(resultado.getDate("fechaIngreso"));
			System.out.println(resultado.getString("puesto"));
			System.out.println(resultado.getString("numeroCreditoInfonavit"));
			System.out.println(resultado.getString("nombre"));
            this.tipoEmpleado = TipoEmpleado.DEFAULT;
            this.numeroImss = "12345";
            this.clinicaImss = "Clinica 1";
            this.rfc = "BENJ";
            this.curp = "BENJ123";
            this.tipoContrato = TipoContrato.PERMANENTE;
            this.tipoEmpleado = TipoEmpleado.CONSULTOR;
            this.sueldoDiario = 1500;
            this.fechaIngreso = "23 abril 2010";
            this.padre = new Persona();
            this.madre = new Persona();
            this.puesto = "Senior Consultant";
            this.empresa = new Empresa(1);
            this.numeroCreditoInfonavit = "1234";
            this.tipoNomina = "Nominita";
            this.departamento = "Funcional";
            this.antiguedadUltimoEmpleo = 3;
            this.constanciaRetencionUltimoEmpleo = "Constancia";
            this.cuentaBanco = 54322;
            datosViajero = new NumeroMillas[1];
            datosViajero[0] = new NumeroMillas();
            documentos = new DocumentosPersonales[1];
            documentos[0] = new DocumentosPersonales();
        }catch(Exception e){
            e.printStackTrace();
        }
	}

    public void setTipo(TipoEmpleado tipo){
        this.tipoEmpleado = tipo;
    }

}